/*!
 * @file moduleSet.hh
 * @brief Moduł do obsługi ustawień
 */

#ifndef __ENGINE_SET_MODULESET_HH
#define __ENGINE_SET_MODULESET_HH

#include <list>
#include <utility>
#include "engine/pawirr.hh"
#include "engine/moduleBase.hh"
#include "engine/set/setContainer.hh"

/*!
 * @brief Moduł do obsługi ustawień
 */
class moduleSet: public moduleBase {
public:
	/*!
	 * @brief Konstruktor
	 * @return Obiekt
	 */
	moduleSet();

	/*!
	 * @brief Sprawdzanie czy na którejś z list istnieje zmienna
	 * @param name Zmienna do sprawdzenia
	 * @return Czy istnieje?
	 */
	bool exists(std::string name);

	/*!
	 * @brief Wypisanie wszystkich zmiennych
	 * @return String ze zmiennymi oddzielonymi średnikami
	 */
	std::string listAll();

	/*!
	 * @brief Dodawanie nowej wartości na listę
	 * @param name Nazwa zmiennej
	 * @param val Zadana wartość int
	 * @return Wskaźnik na utworzony/nadpisany element
	 */
	setContainer *put(std::string name, int val);

	/*!
	 * @brief Dodawanie nowej wartości na listę
	 * @param name Nazwa zmiennej
	 * @param val Zadana wartość string
	 * @return Wskaźnik na utworzony/nadpisany element
	 */
	setContainer *put(std::string name, std::string val);

	/*!
	 * @brief Dodawanie nowej wartości na listę
	 * @param name Nazwa zmiennej
	 * @param val Zadana wartość float
	 * @return Wskaźnik na utworzony/nadpisany element
	 */
	setContainer *put(std::string name, float val);

	/*!
	 * @brief Pobieranie wartości z listy
	 * @param name nazwa zmiennej
	 * @return wskaźnik na kontener z wartością
	 */
	setContainer *get(std::string name);

private:
	/*!
	 * @brief Lista pojemników
	 */
	std::list<std::pair<std::string, setContainer*> > variablesStack;
};

#else
class moduleSet;
#endif
